package JavaSE.SerializationArrayList;

import java.io.*;
import java.util.ArrayList;

/**
 *  练习：序列化集合
 *      当我们想在文件中保存多个对象的时候
 *      可以把多个对象存储在一个集合中
 *      对集合进行序列化和反序列化
 *
 *  分析：
 *      1. 定义一个存储Person对象的ArrayList集合
 *      2. 往ArrayList集合中存储Person对象
 *      3. 创建一个序列化流ObjectOutputStream对象
 *      4. 使用oos中的方法writeObject(),对集合进行序列化
 *      5. 创建一个反序列化ObjectInputStream对象
 *      6. 使用ois中的方法readObject()读取文件中保存的集合
 *      7. 把Object类型的集合转换为ArrayList类型
 *      8. 遍历ArrayList集合验证是否完整
 *      9. 释放资源
 */
public class Practice {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 1. 定义一个存储Person对象的ArrayList集合
        ArrayList<Person> list = new ArrayList<>();
        // 2. 往ArrayList集合中存储Person对象
        list.add(new Person("张三", 21));
        list.add(new Person("李四", 28));
        list.add(new Person("王五", 35));
        // 3. 创建一个序列化流ObjectOutputStream对象
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src\\JavaSE.SerializationArrayList\\personList.dat"));
        // 4. 使用oos中的方法writeObject(),对集合进行序列化
        oos.writeObject(list);
        // 5. 创建一个反序列化ObjectInputStream对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src\\JavaSE.SerializationArrayList\\personList.dat"));
        // 6. 使用ois中的方法readObject()读取文件中保存的集合
        Object readData = ois.readObject();
        // 7. 把Object类型的集合转换为ArrayList类型
        ArrayList<Person> list2 = (ArrayList<Person>) readData;
        // 8. 遍历ArrayList集合验证是否完整
        for (int i = 0; i < list2.size(); i++) {
            System.out.println(list2.get(i).toString());
        }
        //for (Person person : list2) {
        //  System.out.println(person);
        //}
        // 9. 释放资源
        oos.close();
        ois.close();
    }
}



















